#include<iostream>
using namespace std;
/*
问题：继承中同名的静态成员在子类对象上如何进行访问？
静态成员和非静态成员出现同名，处理方式一致
    访问子类同名成员，直接访问即可
    访问父类同名成员，需要加作用域
*/
class Base
{
public:
    static int m_A;
    static void func()
    {
        cout<<"Base static void func()"<<endl;
    }
    static void func(int a)
    {
        cout<<"Base static void func(int a)"<<endl;
    }
};
int Base::m_A=100;
class Son:public Base
{
public:
    static int m_A;
    static void func()
    {
        cout<<"Son static void func()"<<endl;
    }
};
int Son::m_A=200;
//同名静态成员属性
void test01()
{
    //1通过对象访问
    Son s;
    cout<<"Son下m_A="<<s.m_A<<endl;
    cout<<"Base下m_A="<<s.Base::m_A<<endl;

    //2通过类名访问
    cout<<"Son下m_A="<<Son::m_A<<endl;
    //第一个::表示通过类名方式访问，第二个::代表访问父类作用域下
    cout<<"Base下m_A="<<Son::Base::m_A<<endl;
}
//同名静态成员函数
void test02()
{
    //1通过对象访问
    Son s;
    s.func();
    s.Base::func();
    
    //2通过类名访问
    Son::func();
    Son::Base::func();

    //子类出现和父类同名静态成员函数，也会隐藏父类中所有同名成员函数
    //如果想访问父类中被隐藏同名成员，需要加作用域
    Son::Base::func(100);
}
int main()
{
    test01();
    test02();
}